// 1. 正常的命名空间定义
#include <stdio.h>
#include <stdlib.h>
// DJ是命名空间的名字，⼀般开发中是⽤项⽬名字做命名空间名。
namespace DJ
{
	// 命名空间中可以定义变量/函数/类型
	int rand = 10;
	int Add(int left, int right)
    {
		return left + right;
	}
	struct Node
	{
		struct Node* next;
        int val;
	};
}
int main()
{
	// 这⾥默认是访问的是全局的rand函数指针
	printf("%p\n", rand);
	// 这⾥指定bit命名空间中的rand
	printf("%d\n", DJ::rand);	//指定命名空间的成员需要用到 :: 操作符
	return 0;
}
//// 2. 命名空间的嵌套定义
//namespace DJ
//{
//	namespace Django
//	{
//		int rand = 1;
//		int Add(int left, int right)
//		{
//			return left + right;
//		}
//	}
//
//	namespace Jason
//	{
//		int rand = 2;
//		int Add(int left, int right)
//		{
//			return (left + right) * 10;
//		}
//	}
//}
//int main()
//{
//	printf("%d\n", DJ::Django::rand);
//	printf("%d\n", DJ::Jason::rand);
//	printf("%d\n", DJ::Django::Add(1, 2));
//	printf("%d\n", DJ::Jason::Add(1, 2));
//	return 0;
//}
//// 3.多个文件中的namespace进行合并
////利用3个文件进行举例：.h文件对变量类型和函数进行声明  .cpp文件对函数进行定义   test.cpp文件进行测试
//
////DJ.h文件
//#pragma once
//#include<stdio.h>
//#include<stdlib.h>
//namespace DJ
//{
//	int rand = 1;
//	int Add(int left, int right);
//}
//
////////////////////////////////////////////////////////////////////////////////////////////////////
//
////DJ.cpp文件
//#include"DJ.h"
//namespace DJ
//{
//	int Add(int left, int right)
//	{
//		return left + right;
//	}
//}
//
////////////////////////////////////////////////////////////////////////////////////////////////////
//
////test.cpp文件
//#include"DJ.h"
//
////全局定义了一个整数类型的变量和Add函数
//int rand = 2;
//int Add(int left, int right)
//{
//	return (left + right) * 10;
//}
//
//int main()
//{
//	//调用全局的
//	printf("%d\n", rand);
//	printf("%d\n", Add(1, 2));
//
//	//调用DJ namespace的	
//	printf("%d\n", DJ::rand);		//DJ.h文件中的变量定义		
//	printf("%d\n", DJ::Add(1, 2));	//DJ.cpp文件中的函数定义
//	return 0;
//}